package com.woniuxy.jdkproxy;

import com.woniuxy.aspect.MyAspect;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Author: 马宇航
 * @Todo: JDK代理工厂
 * @DateTime: 01/20/0020 上午 11:06
 * @Component: 成都蜗牛学苑
 **/
public class JdkProxyFactory{
    /**
     * @Todo: 通过该工厂，创建一个代理类(已经被代理好了的类)，并返回代理类！
     * ChangeLog : 1. 创建 (01/20/0020 上午 11:07 [马宇航]);
     * @param targetClass
     * @return java.lang.Object
    */
    public static  Object getProxyObject(Object targetClass){
        //匿名内部类
        return Proxy.newProxyInstance(targetClass.getClass().getClassLoader(), targetClass.getClass().getInterfaces(),
                (Object proxy, Method method, Object[] args) -> {
                    //前置增强
                    MyAspect myAspect = new MyAspect();
                    myAspect.beforeLog();
                    //目标方法
                    Object invoke = method.invoke(targetClass, args);
                    myAspect.afterLog();
                    return invoke;
                });
    }
}
